package com.itheima.demo;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class SecurityController {

    /**
     *
     * 在使用请求转发的时候，可以不需要权限访问那些需要权限的网页
     * 服务器内部行为
     *
     * @return
     */
    @RequestMapping("demo1")
    public String demo1() {
        System.out.println("demo1方法执行了");
        return "forward:/d.html";
    }

    /**
     *
     * 在使用重定向的时候，需要对应的权限来进入的网页
     * 需要先登录认证：认证之后才能访问
     *
     * @return
     */
    @RequestMapping("demo2")
    public String demo2() {
        System.out.println("demo2方法执行了");
        return "redirect:/d.html";
    }

    /**
     *
     * 用户必须拥有add权限才能访问
     *
     * @return
     */
    @RequestMapping("demo3")
    @PreAuthorize("hasAuthority('add')")
    public String demo3() {
        System.out.println("demo3方法执行了");
        return "redirect:/a.html";
    }

    /**
     *
     * 用户必须拥有ROLE_MANAGER角色才能访问
     *
     * @return
     */
    @RequestMapping("demo4")
    @PreAuthorize("hasAuthority('ROLE_MANAGER')")
    public String demo4() {
        System.out.println("demo4方法执行了");
        return "redirect:/a.html";
    }

    /**
     *
     * 用户必须拥有ROLE_XXX角色才能访问
     *
     * 经过实验，注解配置的优先度大于配置文件给予的权限，如果注解配置了某种权限给某个角色
     * 允许访问某个地址，那么就算配置文件
     *
     * @return
     */
    @RequestMapping("demo5")
    @PreAuthorize("hasAuthority('ROLE_XXX')")
    public String demo5() {
        System.out.println("demo5方法执行了");
        return "forward:/b.html";
    }

 /**
     *
     * 用户必须拥有ROLE_XXX角色才能访问
     *
     *
     * @return
     */
    @RequestMapping("demo6")
    @PreAuthorize("hasAuthority('ROLE_XXX')")
    public String demo6() {
        System.out.println("demo5方法执行了");
        return "redirect:/b.html";
    }


}
